草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

c++ - 在销毁期间使用 std::shared_ptr 的 Segfault 可能是由于堆栈上的函数调用过多

以下代码编译运行良好:#includestructMyTree{std::shared_ptrleft;std::shared_ptrright;intval;MyTree(std::shared_ptrleft_,std::shared_ptrright_,intval_):left(left_),right(right_),val(val_){};};intmain(){std::shared_ptrt(newMyTree(std::shared_ptr(),std::shared_ptr(),0));for(inti=0;i但是,当for循环从10000更改为100000时,我收

c++ - 在销毁期间使用 std::shared_ptr 的 Segfault 可能是由于堆栈上的函数调用过多

以下代码编译运行良好:#includestructMyTree{std::shared_ptrleft;std::shared_ptrright;intval;MyTree(std::shared_ptrleft_,std::shared_ptrright_,intval_):left(left_),right(right_),val(val_){};};intmain(){std::shared_ptrt(newMyTree(std::shared_ptr(),std::shared_ptr(),0));for(inti=0;i但是,当for循环从10000更改为100000时,我收

c++ - gcc 如何在 linux 上实现 C++ 异常的堆栈展开?

gcc如何在Linux上实现C++异常的堆栈展开?具体来说,它如何知道展开框架时要调用哪些析构函数(即存储了什么样的信息以及存储在哪里)? 最佳答案 参见x86_64ABI的第6.2节.这详细说明了界面,但没有详细说明基础数据。这也独立于C++,并且可以想象也可以用于其他目的。gcc发出的ELF二进制文件主要有两个部分用于异常处理。它们是.eh_frame和.gcc_except_table。.eh_frame遵循DWARF格式(在您使用gdb时主要发挥作用的调试格式)。它与使用-g编译时发出的.debug_frame部分具有完全相

c++ - gcc 如何在 linux 上实现 C++ 异常的堆栈展开?

gcc如何在Linux上实现C++异常的堆栈展开?具体来说,它如何知道展开框架时要调用哪些析构函数(即存储了什么样的信息以及存储在哪里)? 最佳答案 参见x86_64ABI的第6.2节.这详细说明了界面,但没有详细说明基础数据。这也独立于C++,并且可以想象也可以用于其他目的。gcc发出的ELF二进制文件主要有两个部分用于异常处理。它们是.eh_frame和.gcc_except_table。.eh_frame遵循DWARF格式(在您使用gdb时主要发挥作用的调试格式)。它与使用-g编译时发出的.debug_frame部分具有完全相

c++ - 二叉树中的节点搜索溢出堆栈

我使用以下方法遍历*300000层的二叉树:Node*find(intv){if(value==v)returnthis;elseif(right&&valuefind(v);elseif(left&&value>v)returnleft->find(v);}但是,由于堆栈溢出,我遇到了段错误。关于如何在没有递归函数调用开销的情况下遍历深度树的任何想法?*“遍历”是指“搜索具有给定值的节点”,而不是全树遍历。 最佳答案 是的!对于300000级树避免递归。遍历您的树并使用循环迭代找到值。二叉搜索树表示25//Level12036//

c++ - 二叉树中的节点搜索溢出堆栈

我使用以下方法遍历*300000层的二叉树:Node*find(intv){if(value==v)returnthis;elseif(right&&valuefind(v);elseif(left&&value>v)returnleft->find(v);}但是,由于堆栈溢出,我遇到了段错误。关于如何在没有递归函数调用开销的情况下遍历深度树的任何想法?*“遍历”是指“搜索具有给定值的节点”,而不是全树遍历。 最佳答案 是的!对于300000级树避免递归。遍历您的树并使用循环迭代找到值。二叉搜索树表示25//Level12036//

c++ - C和C++如何在堆栈上存储大对象?

我试图弄清楚C和C++如何在堆栈上存储大对象。通常,堆栈是一个整数的大小,所以我不明白在那里存储了更大的对象。他们只是占用多个堆栈“插槽”吗? 最佳答案 堆栈是一块内存。堆栈指针指向顶部。可以将值压入堆栈并弹出以检索它们。例如,如果我们有一个被两个参数调用的函数(一个字节大小,另一个2字节大小;假设我们有一台8位PC)。两者都被压入堆栈,这使堆栈指针向上移动:03:par2byte202:par2byte101:par1现在调用该函数并将返回地址添加到堆栈中:05:retbyte204:retbyte103:par2byte202:

c++ - C和C++如何在堆栈上存储大对象?

我试图弄清楚C和C++如何在堆栈上存储大对象。通常,堆栈是一个整数的大小,所以我不明白在那里存储了更大的对象。他们只是占用多个堆栈“插槽”吗? 最佳答案 堆栈是一块内存。堆栈指针指向顶部。可以将值压入堆栈并弹出以检索它们。例如,如果我们有一个被两个参数调用的函数(一个字节大小,另一个2字节大小;假设我们有一台8位PC)。两者都被压入堆栈,这使堆栈指针向上移动:03:par2byte202:par2byte101:par1现在调用该函数并将返回地址添加到堆栈中:05:retbyte204:retbyte103:par2byte202:

c++ - C++ 中的堆栈损坏

在C++中,堆栈可能会被破坏。我猜的一种方法是通过访问超出其边界的数组来覆盖堆栈变量。有没有其他方法可以损坏它? 最佳答案 你可以有一个随机/未定义的指针,最终指向堆栈,然后写。汇编函数可能会错误地设置/修改/恢复堆栈宇宙波可以翻转堆栈中的位。芯片外壳中的放射性元素可能会翻转位。内核中的任何内容都可能出错并意外更改您的堆栈内存。但这些并不是C++特有的,它不知道堆栈。 关于c++-C++中的堆栈损坏,我们在StackOverflow上找到一个类似的问题: ht

c++ - C++ 中的堆栈损坏

在C++中,堆栈可能会被破坏。我猜的一种方法是通过访问超出其边界的数组来覆盖堆栈变量。有没有其他方法可以损坏它? 最佳答案 你可以有一个随机/未定义的指针,最终指向堆栈,然后写。汇编函数可能会错误地设置/修改/恢复堆栈宇宙波可以翻转堆栈中的位。芯片外壳中的放射性元素可能会翻转位。内核中的任何内容都可能出错并意外更改您的堆栈内存。但这些并不是C++特有的,它不知道堆栈。 关于c++-C++中的堆栈损坏,我们在StackOverflow上找到一个类似的问题: ht